package com.yupi.yurpc.registry;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @program: yu-rpc
 * @description: Java Lotus
 * @author: spring
 * @create: 2024-10-23
 * 本地注册中心
 */
/*
使用线程安全的 ConcurrentHashMap 存储服务注册信息，
key 为服务名称、value 为服务的实现类。之后就可以根据要调用的服务名称获取到对应的实现类，
然后通过反射进行方法调用了。
 */
public class LocalRegistry {

    /*
    注意，本地服务注册器和注册中心的作用是有区别的。
    注册中心的作用侧重于管理注册的服务、提供服务信息给消费者；
    而本地服务注册器的作用是根据服务名获取到对应的实现类，是完成调用必不可少的模块。
     */

    /**
     * 注册信息存储
     */
    private static final Map<String, Class<?>> map = new ConcurrentHashMap<>();

    /**
     * 注册服务
     *
     * @param serviceName 服务名称
     * @param implClass   引入类
     */
    public static void register(String serviceName, Class<?> implClass) {
        map.put(serviceName, implClass);
    }

    /**
     * 获取服务
     *
     * @param serviceName 服务名称
     * @return 获取信息
     */
    public static Class<?> get(String serviceName) {
        return map.get(serviceName);
    }

    /**
     * 删除服务
     *
     * @param serviceName 服务名称
     */
    public static void remove(String serviceName) {
        map.remove(serviceName);
    }
}
